package study.ws.area.service.impl;

import java.util.List;

import javax.jws.WebService;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import study.ws.area.dao.IAreaDao;
import study.ws.area.dao.impl.AreaDaoImpl;
import study.ws.area.pojo.Area;
import study.ws.area.service.IAreaService;

/**  
* @Name: AreaService
* @Description: 区域查询service接口实现类
* @Author: 李超
* @Create Date: 2017-01-07
*/
@WebService
public class AreaServiceImpl implements IAreaService {
	
	private IAreaDao areaDao = new AreaDaoImpl() ;

	/**  
	* @Name: queryArea（方法的名称）
	* @Description: 根据父级区域id、起始、结束记录号查询区域信息（方法的描述）
	* @Author: 李超（作者）
	* @Version: V1.00 （版本号）
	* @Create Date: 2017-01-07 （创建日期）
	* @Parameters: String requestXmlString 接收客户端soap请求的xml数据
	* @Return: String 返回soap响应的xml数据（返回值，如果没有，填写为“无”）
	*/
	@Override
	public String queryArea(String requestXmlString) throws Exception {
		//将xml数据转换成java对象(使用Area)
		Area area = parseRequestXml(requestXmlString) ;
		//调用dao方法，获取区域信息
		List<Area> areaList = areaDao.queryArea(area.getParentID(), area.getStart(), area.getEnd()) ;
		//将获取到的区域信息转换成xml响应数据
		String responseXml = createResponseXml(areaList) ;
		//返回给客户端
		return responseXml;
	}
	
	/**  
	* @Name: parseRequestXml（方法的名称）
	* @Description: 解析soap请求的xml数据，获取xml节点中的请求参数
	* @Author: 李超（作者）
	* @Version: V1.00 （版本号）
	* @Create Date: 2017-01-07 （创建日期）
	* @Parameters: String requestXmlString 客户端soap请求的xml数据
	* @Return: Area 返回area-java对象（返回值，如果没有，填写为“无”）
	*/
	private Area parseRequestXml(String requestXmlString) throws DocumentException {
		Area area = new Area() ;
		//创建dom4j文档对象
		Document document = DocumentHelper.parseText(requestXmlString) ;
		//获取请求数据
		String parentID = document.selectSingleNode("//queryarea/parentid").getText() ;
		String start = document.selectSingleNode("//queryarea/start").getText() ;
		String end = document.selectSingleNode("//queryarea/end").getText() ;
		area.setParentID(parentID) ;
		area.setStart(Integer.parseInt(start)) ;
		area.setEnd(Integer.parseInt(end)) ;
		return area ;
	}
	
	/**  
	* @Name: createResponseXml（方法的名称）
	* @Description: 将获取到的区域信息转换成xml响应数据
	* @Author: 李超（作者）
	* @Version: V1.00 （版本号）
	* @Create Date: 2017-01-07 （创建日期）
	* @Parameters: List<Area> areaList 查询获取到的区域信息
	* @Return: String 返回soap协议响应的xml数据（返回值，如果没有，填写为“无”）
	*/
	private String createResponseXml(List<Area> areaList) {
		//创建dom4j的文档对象
		Document document = DocumentHelper.createDocument() ;
		//创建root节点
		Element root = DocumentHelper.createElement("areas") ;
		document.setRootElement(root) ;
		//遍历list集合，生成区域信息的xml数据
		for (Area area : areaList) {
			//创建数据节点，存放区域数据
			Element element_area = root.addElement("area") ;
			element_area.addElement("areaid").setText(area.getAreaID()) ;
			element_area.addElement("areaname").setText(area.getAreaName()) ;
			element_area.addElement("parentid").setText(area.getParentID()) ;
			element_area.addElement("arealevel").setText(area.getAreaLevel()) ;
		}
		//返回生成的xml字符串
		return document.asXML(); 
	}
	
	
	
	
	
	
	

}
